<?php

namespace Tools;
use Think\Controller;

class  AdminController extends Controller{
    //构造方法:实现各个方法访问过滤效果
    function __construct(){
        //避免覆盖父类构造方法，给其先执行；
        parent::__construct();

        //获得当前用户访问的"控制器/操作方法"信息
        $nowac = CONTROLLER_NAME."-".ACTION_NAME;
        //获得当前用户“允许”访问的权限信息
        //amdin   role   auth
        //获得登录系统管理员信息，进而获得角色id
        $admin_id = session('admin_id');
        $admin_name= session('admin_name');

        //为登录系统用户判断,未登录跳转登录页面
        //如果访问“登录页面，验证码,退出页面”则允许访问
        $loginac = "Manager-login,Manager-logout,Manager-verifyImg";

        //没有登录，并且当前控制器不是登录，登出，验证码页面则跳转到登录页面
        if(empty($admin_name)&& strpos($loginac,$nowac)===false){
            $moduleurl = __MODULE__;
            $js = <<< eof
                  <script type="text/javascript">
                  window.top.location.href="{$moduleurl}/Manager/login";
                  </script>
eof;
            echo $js;
//            $this->redirect('Manager/login',array(),1,"你还没登录!");
            exit();
        }

        $manager_info = D('Manager')->find($admin_id);
        $roleid = $manager_info['mg_role_id'];

        //根据$roleid 获得角色信息
        $roleinfo = D('Role')->find($roleid);
        $auth_ac = $roleinfo['role_auth_ac'];//获得对应角色的控制器，操作方法

        //默认允许大家都可以访问的
        $allow_ac = "Manager-login,Manager-logout,Manager-verifyImg,Index-index,Index-left,Index-head,Index-right";
        //越权访问判断过滤
        //1.当前访问的权限必须出现在其“权限”列表里面
        //2.当前访问的权限 也 没有出现在 “默认允许的权限列表”里面
        //3.访问者不是超级管理员
        //那么当前权限就“没有权限访问”

        //当前访问的权限与允许访问权限  多 “对比”
        //strpos 判断一个小的字符串在一个大的字符串中第一次出现的位置
        if(strpos($auth_ac,$nowac) === false && strpos($allow_ac,$nowac)===false && $admin_name !== "admin"){
            echo $nowac."<br>";
            echo $auth_ac."<br>".$allow_ac;
            exit('没有权限访问');
        }

//        echo "过滤每个方法";
    }

}
